// font tester scripts // ===================== // set true to get some feedback in the console tester_debug = true; function show_desktop_font_tester(){ var current_text = $j('#web_font_tester_input').val(); current_text = current_text.replace(/(\r\n|\n|\r)/gm,""); $j("#desktop_font_tester_input").val(current_text); $j('#web_font_tester').slideUp(); $j('#desktop_font_tester').slideDown(); $j('#desktop_font_tester_input').show(); $j('#web_font_tester_size_slider').hide(); render_testers(); $j('#btn_desktop').attr("class","btn btn-xs active"); $j('#btn_web').attr("class","btn btn-xs btn-default"); } function show_web_font_tester(){ $j('#web_font_tester').slideDown(); $j('#desktop_font_tester').slideUp(); $j('#desktop_font_tester_input').hide(); $j('#web_font_tester_size_slider').show(); $j('#btn_web').attr("class","btn btn-xs active"); $j('#btn_desktop').attr("class","btn btn-xs btn-default"); } // for styles $j('.type_tester_styles_edit').keyup(function() { var txt = $j(this).val(); if (txt.toLowerCase() =='underware') txt='Loves you!'; var len = txt.length; if (len>30) txt = txt.substring(0,30) + "..."; $j('.type_tester_styles_edit').val(txt); }); $j('#features_btn, #features_close').click(function() { $j('#feature_menu').toggle(); update_feature_menu($j('#desktop_font_tester_features').val().split(','), $j('#desktop_font_tester_features_names').val()); if ($j('#features_btn').html() != 'show features') { $j('#features_btn').html('show features'); }else{ $j('#features_btn').html('close features'); } }); $j("#font_menu li a").click( function() { var font = $j(this).data("info").split('/'); if (font.length == 1 ){ var old_font = $j('.font_menu:visible').first().attr('class').replace('font_menu','').trim(); var new_font_style = $j('.' + font).first().find('a').data("info").split('/'); if (tester_debug) console.log ('FONT SWITCH to: ' + font + ' > ' + old_font + ' > ' + new_font_style); // =============== add the css to the head $j('head').append(''); // =============== replace the font menu $j('.font_menu').addClass('hidden'); $j('.' + font).removeClass('hidden'); $j('.other_fonts').removeClass('hidden'); $j('#other_fonts_' + font).addClass('hidden'); // =============== hide un-hide buy button if (font == 'unibody') { $j('.buy_button').addClass('hidden'); $j('.download_button').removeClass('hidden'); } else{ $j('.buy_button').removeClass('hidden'); $j('.download_button').addClass('hidden'); } // =============== change the default text $j("#desktop_font_tester_input_default").val(new_font_style[0]); if ($j("#desktop_font_tester_input").val()==''){ $j("#web_font_tester_input").val(new_font_style[0]); } // =============== change the URL var stateObj = { foo: "bar"}; history.pushState(stateObj, "Underware", "/fonts/"+ font + "/try"); // =============== update the links $j(".font_section_link").each(function(){ $j(this).attr("href",$j(this).attr("href").replace(old_font,font)); }); // =============== update header image $j("#font_section_header").attr("src", $j("#font_section_header").attr("src").replace(old_font,font)); // =============== get the first image font = $j('.' + font).first().find('a').data("info").split('/'); } update_feature_menu(font[4].split(','), font[5]); document.getElementById('web_font_tester_input').setAttribute("class",font[0]); $j("#desktop_font_tester_font").val(font[0]); $j("#desktop_font_tester_features").val(font[4]); $j("#desktop_font_tester_features_names").val(font[5]); if (font[1] !=='') document.getElementById('web_font_tester_input').style.fontWeight=font[1]; if (font[1] !=='') document.getElementById('web_font_tester_input').style.fontstyle=font[2]; render_testers(); }); // fontsize slider $j('#sl1').slider({ formater: function(value) { return 'Current value: '+ size; } }); $j('#web_font_tester_size_slider').hide(); var change_font_size = function (){ $j('#web_font_tester_input').css('font-size', size.getValue() + 'px'); $j('#web_font_tester_size_info').html('font-size: ' + size.getValue() + 'px'); setCookie ('underware_type_tester',size.getValue(),200); }; //$j('#web_font_tester_size_slider').hide(); // get the default values and apply for the web-tester var tester_default = readCookie('underware_type_tester'); if (tester_default===null) tester_default=20; $j('#sl1').slider('setValue',tester_default) $j('#web_font_tester_input').css('font-size', tester_default + 'px'); $j('#web_font_tester_input').css('font-size', '60px'); var size = $j('#sl1').slider().on('slide', change_font_size).data('slider'); // desktop tester $j("#desktop_font_tester_input").on('input propertychange', function() { update_features_web_font_tester(); render_testers(); $j("#web_font_tester_input").val($j("#desktop_font_tester_input").val()); }); $j("input[name='feature'], input[name='feature_num1'], input[name='feature_num2']").click( function() { update_features_web_font_tester(); refresh_web_tester_input(); render_testers(); }); if ($j('#desktop_font_tester_features').length >0) { update_features_web_font_tester(); update_feature_menu($j('#desktop_font_tester_features').val().split(','), $j('#desktop_font_tester_features_names').val()); } // functions if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) { var safari=navigator.userAgent.indexOf('Safari'); } else{ var safari=-1; } function update_feature_menu(features, SSnames){ if (tester_debug) console.log('updating features with' + features + ' and ' + SSnames) //console.log('info on page: ' + $j('#desktop_font_tester_features_names').val()) all =['liga','dlig','sups','subs','ordn','smcp','c2sc','lnum','onum','pnum','tnum','frac','zero','swsh','calt','salt', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'ss07','ss08', 'ss09', 'ss10', 'ss11', 'ss12', 'ss13', 'ss14', 'ss15', 'ss16', 'ss17','ss18', 'ss19', 'ss20'] cats=['ligatures','lettercase','numbercase','verticalposition','numberspacing','fractions','typographic_extras','contextual_alternates','stylistic_sets']; for (fea in all) $j('.fea_' + all[fea]).css('display','none'); for (fea in features) $j('.fea_' + features[fea]).css('display','block'); // finally check which menu items to show and which ones not. // first make all invisible for (c in cats) $j('#' + cats[c]).css('display','none'); // then check which ones to show if ($j.inArray('liga', features)!=-1) $j('#ligatures').css('display','block'); if ($j.inArray('smcp', features)!=-1 || $j.inArray('c2sc', features)!=-1) $j('#lettercase').css('display','block'); if ($j.inArray('lnum', features)!=-1 || $j.inArray('onum', features)!=-1) $j('#numbercase').css('display','block'); if ($j.inArray('tnum', features)!=-1 || $j.inArray('pnum', features)!=-1) $j('#numberspacing').css('display','block'); if ($j.inArray('subs', features)!=-1 || $j.inArray('sups', features)!=-1 && $j.inArray('ordn', features)!=-1) $j('#verticalposition').css('display','block'); if ($j.inArray('frac', features)!=-1) $j('#fractions').css('display','block'); if ($j.inArray('zero', features)!=-1) $j('#typographic_extras').css('display','block'); if ($j.inArray('calt', features)!=-1) $j('#contextual_alternates').css('display','block'); if ($j.inArray('ss01', features)!=-1) $j('#stylistic_sets').css('display','block'); // and finally check if there are custom names for the stylistic sets //console.log ('SSname: ' + SSnames); names = SSnames.split("|"); SSfinal = []; for (i=0; i< names.length; i++){ parts = names[i].split('#'); SSfinal[parts[0]] = parts[1]; } for (i=1;i<=20; i++){ if (SSfinal[i]!= undefined && SSfinal[i]!= ''){ $j("#ss_name_"+ i).text(SSfinal[i] + " (0" + i +")"); } else{ $j("#ss_name_"+ i).html("(ss0"+ i +")"); } } } function update_features_web_font_tester(){ var defaultOff = [ 'smcp', 'c2sc', 'lnum', 'onum', 'tnum', 'pnum', 'sups', 'subs', 'ordn', 'frac', 'zero', 'liga', 'dlig', 'swsh', 'calt', 'salt', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05','ss06', 'ss07', 'ss08', 'ss09', 'ss10', 'ss11', 'ss12', 'ss13', 'ss14', 'ss15','ss16', 'ss17', 'ss18', 'ss19', 'ss20' ]; defaultOffFinal = []; for (f in defaultOff){ if ($j('#'+ defaultOff[f]).length > 0){ defaultOffFinal.push(defaultOff[f]); } } defaultOff = defaultOffFinal; //var defaultOn = [ 'liga', 'kern'']; var defaultOn = ['liga', 'calt']; var mfeatures = ""; var wfeatures = ""; var extrafeatures = ""; var f; for (f in defaultOn) { if (!document.getElementById(defaultOn[f]).checked) { mfeatures += defaultOn[f] + "=0, "; } if (!document.getElementById(defaultOn[f]).checked) { wfeatures += """+ defaultOn[f] + "" 0, "; } } for (f in defaultOff) { //console.debug(defaultOff[f]) if (document.getElementById(defaultOff[f]).checked) { mfeatures += defaultOff[f] + "=1, "; } if (document.getElementById(defaultOff[f]).checked) { wfeatures += """+ defaultOff[f] + "" 1, "; } } mfeatures = mfeatures.substring(0, mfeatures.length - 2); wfeatures = wfeatures.substring(0, wfeatures.length - 2); if (document.getElementById('liga').checked && safari!=-1) { $j('#web_font_tester_input').css('text-rendering','optimizeLegibility') $j('#web_font_tester_input').css('-webkit-font-feature-settings','normal'); $j('#web_font_tester_input').css('-webkit-font-feature-settings','"liga"'); } if (document.getElementById('liga').checked ) document.getElementById("safarifeatures").innerHTML = 'optimizeLegibility'; if (!document.getElementById('liga').checked && safari!=-1) { $j('#web_font_tester_input').css('text-rendering','optimizeSpeed') $j('#web_font_tester_input').css('-webkit-font-feature-settings','normal'); $j('#web_font_tester_input').css('-webkit-font-feature-settings','"liga=0"'); } if (!document.getElementById('liga').checked) document.getElementById("safarifeatures").innerHTML = 'optimizeSpeed'; document.getElementById("mozfeatures").innerHTML = mfeatures; document.getElementById("mozfeatures13").innerHTML = wfeatures; document.getElementById("msfeatures").innerHTML = wfeatures; document.getElementById("ofeatures").innerHTML = wfeatures; document.getElementById("webkitfeatures").innerHTML = wfeatures; document.getElementById("w3cfeatures").innerHTML = wfeatures; } function refresh_web_tester_input() { var sample = document.getElementById("web_font_tester_input"); var wfeatures = document.getElementById("mozfeatures13").innerHTML; if ("MozFontFeatureSettings"in sample.style) { // first, reset the property to normal sample.style.MozFontFeatureSettings = "normal"; // old Firefox syntax var mfeatures = document.getElementById("mozfeatures").innerHTML; sample.style.MozFontFeatureSettings = "'"+ mfeatures + "'"; // if that failed setting will be "normal", use standard syntax if (sample.style.MozFontFeatureSettings == "normal") { sample.style.MozFontFeatureSettings = wfeatures; } } document.getElementById("w3cfeatures").innerHTML = wfeatures; sample.style.msFontFeatureSettings = wfeatures; sample.style.oFontFeatureSettings = wfeatures; if (safari==-1){ sample.style.WebkitFontFeatureSettings = wfeatures; } sample.style.fontFeatureSettings = wfeatures; }; function render_testers(){ if($j('#desktop_font_tester').is(':visible')){ var text = $j("#desktop_font_tester_input").val(); var font = $j("#desktop_font_tester_font").val(); var format = $j("#desktop_font_tester_format").val(); if (text == '') text = $j("#desktop_font_tester_input_default").val(); var myfeatures = []; $j("input[name='feature']:checked").each(function() { myfeatures.push($j(this).val() + '=1'); }); $j("input[name='feature']:not(:checked)").each(function() { myfeatures.push($j(this).val() + '=0'); }); $j("input[class='feature_num1']:checked").each(function() { myfeatures.push($j(this).val() + '=1'); }); $j("input[class='feature_num2']:checked").each(function() { myfeatures.push($j(this).val() + '=1'); }); $j("input[class='verpos']:checked").each(function() { myfeatures.push($j(this).val() + '=1'); }); myfeatures.join(','); text = text.replace("'","%27"); $j("#desktop_font_tester_image").attr("src","/_app/_lib/harfbuzz_render.php?text=" + encodeURIComponent(text) + "&font="+ font + "&format="+ format + "&features="+ myfeatures); } } // plugins (function() { var fullScreenApi = { supportsFullScreen: false, isFullScreen: function() { return false; }, requestFullScreen: function() {}, cancelFullScreen: function() {}, fullScreenEventName: '', prefix: '' }, browserPrefixes = 'webkit moz o ms khtml'.split(' '); // check for native support if (typeof document.cancelFullScreen != 'undefined') { fullScreenApi.supportsFullScreen = true; } else { // check for fullscreen support by vendor prefix for (var i = 0, il = browserPrefixes.length; i < il; i++ ) { fullScreenApi.prefix = browserPrefixes[i]; if (typeof document[fullScreenApi.prefix + 'CancelFullScreen' ] != 'undefined' ) { fullScreenApi.supportsFullScreen = true; break; } } } // update methods to do something useful if (fullScreenApi.supportsFullScreen) { fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange'; fullScreenApi.isFullScreen = function() { switch (this.prefix) { case '': return document.fullScreen; case 'webkit': return document.webkitIsFullScreen; default: return document[this.prefix + 'FullScreen']; } } fullScreenApi.requestFullScreen = function(el) { return (this.prefix === '') ? el.requestFullScreen() : el[this.prefix + 'RequestFullScreen'](); } fullScreenApi.cancelFullScreen = function(el) { return (this.prefix === '') ? document.cancelFullScreen() : document[this.prefix + 'CancelFullScreen'](); } } // jQuery plugin if (typeof jQuery != 'undefined') { jQuery.fn.requestFullScreen = function() { return this.each(function() { if (fullScreenApi.supportsFullScreen) { fullScreenApi.requestFullScreen(this); } }); }; } // export api window.fullScreenApi = fullScreenApi; })(); if (fullScreenApi.supportsFullScreen) { if ($j('#fullscreen_btn').length >0) { $j('#fullscreen_btn').css('display','block'); fullscreen_btn = document.getElementById('fullscreen_btn'); element = document.getElementById('font_tester_container'); //font_tester_container fullscreen_btn.addEventListener('click', function() { fullScreenApi.requestFullScreen(element); //$j('#fullscreen_btn').css('display','none'); }, true); } } (function($) { $.fn.drags = function(opt) { opt = $.extend({ handle: "", cursor: "move", draggableClass: "draggable", activeHandleClass: "active-handle" }, opt); var $selected = null; var $elements = (opt.handle === "") ? this : this.find(opt.handle); $elements.css('cursor', opt.cursor).on("mousedown", function(e) { if(opt.handle === "") { $selected = $(this); $selected.addClass(opt.draggableClass); } else { $selected = $(this).parent(); $selected.addClass(opt.draggableClass).find(opt.handle).addClass(opt.activeHandleClass); } var drg_h = $selected.outerHeight(), drg_w = $selected.outerWidth(), pos_y = $selected.offset().top + drg_h - e.pageY, pos_x = $selected.offset().left + drg_w - e.pageX; $(document).on("mousemove", function(e) { $selected.offset({ top: e.pageY + pos_y - drg_h, left: e.pageX + pos_x - drg_w }); }).on("mouseup", function() { $(this).off("mousemove"); // Unbind events from document if ($selected !== null) { $selected.removeClass(opt.draggableClass); $selected = null; } }); e.preventDefault(); // disable selection }).on("mouseup", function() { if(opt.handle === "") { $selected.removeClass(opt.draggableClass); } else { $selected.removeClass(opt.draggableClass) .find(opt.handle).removeClass(opt.activeHandleClass); } $selected = null; }); return this; }; })(jQuery); $j(function() { $j( "#feature_menu").drags(); }); // ================== // end font tester